package com.dalin.platform.loa.service;

import java.util.List;

import javax.jws.WebService;

import com.dalin.common.pager.WsHeaderInfo;
import com.dalin.platform.loa.vo.WsCurrentUserInfo;
import com.dalin.platform.loa.vo.WsDicItemVo;
import com.dalin.platform.loa.vo.WsMenuTreeVo;
import com.dalin.platform.loa.vo.WsOperateVo;
import com.dalin.platform.loa.vo.WsUserVo;

/*****************************************************************************
 * @content: 系统安全验证业务操作接口                                                                                                   *
 * @author : 那建林                                                                                                                                 *
 * @crtDate: 2010-05-12                                                     *
 * @modDate: 2010-05-13                                                     *
 ****************************************************************************/
@WebService
public interface WsSecurityService {
	/*************************************************************************
	 * @content: 获得某组织所有用户信息,organId为null则全查
	 * @param  : projectId 所属系统主键
	 * @return : List<WsUserVo>
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-06-09
	 * @modDate: 2010-06-09
	 */
	List<WsUserVo> queryAllUsers(Long projectId) throws Exception;
	
	/*************************************************************************
	 * @content: 增加一个权限用户,返回此权限用户的ID,如果为null,添加失败
     * @param  : vo值对象
     * @return : Long userId
     * @remark :
     * @author : 那建林
     * @crtDate: 2010-12-12 21:29:55
     * @modDate: 2010-12-12 21:29:55
     */
	Long addUser(WsUserVo vo) throws Exception;
    
	/*************************************************************************
	 * @content: 根据用户ID来查找用户信息
	 * @param  : userId 用户主键
	 * @return : WsUserVo
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-06-09
	 * @modDate: 2010-06-09
	 */
	WsUserVo findUserById(Long userId) throws Exception;
	
	/*************************************************************************
	 * @content: 检查用户登录权限
	 *  1.检查是否存在用户
	 *  2.检查是否有权限登录此系统
	 * @param  : loginName 登录名称
	 * @param  : loginPswd 登录密码
	 * @param  : loginIp 登录IP
	 * @return : CurrentUserInfo
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-05-13
	 * @modDate: 2010-11-17
	 */
	WsCurrentUserInfo checkLogin(String loginName, 
								String loginPswd, 
								String loginIp) throws Exception;
	 
	/*************************************************************************
	 * @content: 修改用户密码,如果为空则修改成功,否则返回原因
	 * @param  : userId 用户ID
	 * @param  : originalLoginPswd 原密码
	 * @param  : loginPswd 登录密码
	 * @return : String 
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-06-15
	 * @modDate: 2010-06-15
	 */
	String modifyUserPswd(Long userId, 
			String originalLoginPswd, String loginPswd) throws Exception;
	
	/*************************************************************************
	 * @content: 查询此用户下拥有的菜单权限
	 * @param  : lum 用户标识码
	 * @param  : parentId 菜单父ID
	 * @return : List<MenuTreeVo>
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-05-13
	 * @modDate: 2010-05-13
	 */
	List<WsMenuTreeVo> queryMenus(Long lum, Long parentId) throws Exception;
	
	/*************************************************************************
	 * @content: 添加系统操作日志,目前只记录登录/退出/菜单
	 * @param  : lum 用户标识码
	 * @param  : resourceAddress 访问地址
	 * @param  : operateIp 操作IP
	 * @return : void
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-06-25
	 * @modDate: 2010-06-24
	 */
	void addOperateLog(Long lum, String resourceAddress, String operateIp) throws Exception;
	
	/*************************************************************************
	 * @content: 查询此用户下拥有的可访问字典表及细目
	 * @param  : projectId 项目ID
	 * @return : List<String>
	 * @remark : 用户一次性查出放在缓存中,所以没写单独的根据类型查细目及单个记录的方法
	 * @author : 那建林
	 * @crtDate: 2010-05-13
	 * @modDate: 2010-12-12 00:11:11 
	 */
	List<String> queryAllTypes(Long projectId) throws Exception;
	
	/*************************************************************************
	 * @content: 查询此用户下拥有的可访问字典表及细目
	 * @param  : projectId 项目ID
	 * @param  : typeCode 类型编码
	 * @return : List<WsDicItemVo>
	 * @remark : 用户一次性查出放在缓存中,所以没写单独的根据类型查细目及单个记录的方法
	 * @author : 那建林
	 * @crtDate: 2010-05-13
	 * @modDate: 2010-12-12 00:11:11 
	 */
	List<WsDicItemVo> queryItemsByType(Long projectId, String typeCode) throws Exception;
	
	/*************************************************************************
	 * @content: 检查此用户是否有权限访问此资源
	 * @param  : lum 用户标识码
	 * @param  : resourceAddress请求地址 //resourceId 资源主键
	 * @return : boolean
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2010-12-30 14:07:29
	 * @modDate: 2010-12-30 14:07:29
	 */
	boolean checkURI(Long lum, String resourceAddress) throws Exception;
	
	
	/*************************************************************************
	 * @content: 查询此用户所请求的资源拥有的按钮
	 * @param  : lum 用户标识码
	 * @param  : menuId 菜单ID
	 * @param  : parentId 父ID
	 * @return : List<WsOperateVo>
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2011-01-13 19:22:33
	 * @modDate: 2011-01-13 19:22:33
	 */
	List<WsOperateVo> queryLoaOperates(Long lum, Long menuId, Long parentId) throws Exception;
	
	/*************************************************************************
	 * @content: 查询此用户所请求的资源拥有的按钮
	 * @param  : lum 用户标识码
	 * @param  : operateId 操作ID
	 * @return : List<WsOperateVo>
	 * @remark : 
	 * @author : 那建林
	 * @crtDate: 2011-01-13 19:22:33
	 * @modDate: 2011-01-13 19:22:33
	 */
	List<WsHeaderInfo> queryLoaHeaders(Long lum, Long operateId) throws Exception;
	
	/*************************************************************************
	 * @content: 查询此用户所拥有的数据权限
	 * @param  : lum 用户标识码
	 * @param  : operateId 操作ID
	 * @return : List<Integer>
	 * @remark : 
	 * @author : 那建林
	 * @throws Exception 
	 * @crtDate: 2011-03-04 15:17:22
	 * @modDate: 2011-03-04 15:17:22
	 */
	List<Integer> queryLoaDataLevelsByUserId(Long lum, Long operateId) throws Exception;
}